import axios from 'axios';

import {ElMessage} from 'element-plus'

//定义一个变量,记录公共的前缀  ,  baseURL
const baseURL = import.meta.env.VITE_BASE_URL;
//请求的超时时间
const timeout = 20000;  // 表示如果请求耗时超过20秒未完成，Axios会主动取消该请求。
const instance = axios.create({baseURL, timeout})

import router from "@/router/index.js";

//添加响应拦截器,可以在接口响应后 统一处理结果
instance.interceptors.response.use(
    response => {
        let res = response.data;
        //判断业务状态码200正常状态，101是需要继续操作的状态码
        if (res.code === 200 || res.code === 101) {
            return res;
        }

        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        if (typeof res === 'string') { //检查 res 是否为字符串类型
            res = res ? JSON.parse(res) : res
        }

        //操作失败
        return Promise.reject(res)

    },
    error => {
        // 1.判断是否为超时错误
        if (error.code === 'ECONNABORTED' || error.message.includes('timeout')) {
            return Promise.reject(new Error('系统繁忙，请稍后重试'));
        }

        // 2. 处理网络错误（如无响应）
        if (!error.response) {
            return Promise.reject(new Error('网络异常，请检查连接'));
        }

        // 3. 处理 HTTP 状态码错误
        const {status, data} = error.response;
        switch (status) {
            case 404:
                router.push('/404');
                ElMessage.error('请求的资源不存在');
                break;
            case 500:
                ElMessage.error(data?.message || '系统异常');
                break;
            default:
                ElMessage.error(data?.message || '系统未知错误');
        }
        return Promise.reject(error);//异步的状态转化成失败的状态
    }
)
//导出实例
export default instance;